Lambda@Edgeをアタッチするときに「Cannot read properties of undefined (reading ‘endsWith’)」エラーが出たときの対処法
こんにちは、臼田です。
みなさん、LambdaLambdaしてますか?(挨拶
今回はLambda@Edgeを使っていて困った内容と改善方法を共有します。
Cannot read properties of undefined (reading 'endsWith') のエラー
初めてLambda@Edgeを設定しようと思い、Lambdaで関数を作成し、概要のトリガーを追加からデプロイしようとしたところ、下記のエラーが出ました。
Cannot read properties of undefined (reading 'endsWith')
こちらのエラーでググってみると、AWS外の問題でいろいろ見つかるのですが、どうやら共通して言えるのはjavascriptの問題っぽいということです。LambdaのコードがNode.jsであるのでこちらの問題も可能性として考えられましたが、AWSマネジメントコンソールなどのフロントの問題の可能性も捨てきれませんでした。
そして、私は経験上、初めてのサービスを設定するときには一度失敗したあと、リトライで成功することをよく知っています。これはService-Linked Roleの作成が同時に行われ、その完了が間に合わないなどで処理が失敗するためであるという体感です。(ケースバイケースなのとすべてがそうではないので一概には言えないですが)
今回もその影響でエラーが出ている可能性を考え、しばらくエラーについて下調べした後、リトライしました。
無事に成功しました。
というわけでこのエラーが出たときはリトライすれば問題なく成功する可能性があります。
要因分析
無事Lambda@Edgeの設定が終わったので、要因をもう少し確認しようと思いました。
まず推測していた、Service-Linked Roleの作成がされていなくて失敗したというものですが、これはおそらく違いました。
該当のIAM RoleはAWSServiceRoleForLambdaReplicator
ですが作成時刻を確認に行くと、2回目の(成功したタイミングの)作業時に作成されていたようでした。1回目の(失敗した)作成時から3分程度後でもあるため、どうやら私の推測は違っているようでした。
次に、CloudTrailのバージニアリージョンにて該当操作時のログを確認しましたが、それらしいログが見当たりませんでした。
つまり、AWS側にリクエストが届いていない可能性が考えられます。そのため、前述の推測していたエラーの原因の内、AWSマネジメントコンソールなどのフロントの問題の可能性が高いのではないかと推測しています。
しかし、これはもう確認のしようがないのでここまでで分析を終了しました。
まとめ
Lambda@Edgeを初めて設定するときに遭遇したエラーについて確認と推測をしてみました。
成功した方法と、わかる限りの要因については上げてみましたので、もしこれに遭遇してより深く確認したい方は、フロントの動作周りを確認してみてください。また、もし同じ手法で解決しなかった場合には、AWSサポートを頼ってください。